
/*
    Software License

    Copyright (C) 2021-05-24  Xoronos

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, version 3.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <https://www.gnu.org/licenses/>.
*/

/*
    Liabilities

    The software is provided "AS IS" without any warranty of any kind, either expressed,
    implied, or statutory, including, but not limited to, any warranty that the software
    will conform to specifications, any implied warranties of merchantability, fitness
    for a particular purpose, and freedom from infringement, and any warranty that the
    documentation will conform to the software, or any warranty that the software will
    be error free.

    In no event shall Xoronos be liable for any damages, including, but not limited to,
    direct, indirect, special or consequential damages, arising out of, resulting from,
    or in any way connected with this software, whether or not based upon warranty,
    contract, tort, or otherwise, whether or not injury was sustained by persons or
    property or otherwise, and whether or not loss was sustained from, or arose out of
    the results of, or use of, the software or services provided hereunder.

    To request the provided software under a different license you can contact us at
    support@xoronos.com
*/

#ifndef PARSER_FUN_H
#define PARSER_FUN_H
#include "parser.h"
#include "parser_options.h"
#include "lexcheck.h"

int callback_arithmetic_conf( char *args
 );
int callback_decoding_conf( char *args
 );
int callback_encoding_conf( char *args
 );
int callback_sequence_conf( char *args
 );
int callback_permutation_conf( char *args
 );
int callback_logging_conf( char *args
 );
int callback_dump_encoding_param( char *args
 );
int callback_decode_encode( char *args
 );
int callback_mine_xmatrix_comp_rnd( char *args
 );
int callback_mine_xmatrix_comp_ot( char *args
 );
int callback_permute_xmatrix_comp_random( char *args
 );
int callback_permute_xmatrix_comp_deterministic( char *args
 );
int callback_permute_xmatrix_comp_confidential( char *args
 );
int callback_decompress_xmatrix( char *args
 );
int callback_check_xmatrix_comp( char *args
 );
int callback_check_xmatrix( char *args
 );
int callback_make_point( char *args
 );
int callback_make_confidential_pseudo_random_number( char *args
 );
int callback_make_start_point( char *args
 );
int callback_make_monomial_key( char *args
 );
int callback_make_binomial_key( char *args
 );
int callback_exchange_monomial_key( char *args
 );
int callback_make_monovalent_key( char *args
 );
int callback_exchange_polyvalent_key( char *args
 );
int callback_check_monovalent_key( char *args
 );
int callback_make_commitment_binomial_key( char *args
 );
int callback_make_commitment_sym_signature( char *args
 );
int callback_make_commitment_sym_certificate( char *args
 );
int callback_make_response( char *args
 );
int callback_make_monomial_proof( char *args
 );
int callback_make_monomial_proof_sym_signature( char *args
 );
int callback_make_monomial_proof_sym_certificate( char *args
 );
int callback_check_monomial_proof( char *args
 );
int callback_check_monomial_proof_sym_signature( char *args
 );
int callback_check_monomial_proof_sym_certificate( char *args
 );
int callback_make_signature_symmetric( char *args
 );
int callback_make_signature_asymmetric( char *args
 );
int callback_make_ring_signature( char *args
 );
int callback_permute_ring_signature( char *args
 );
int callback_make_certificate_symmetric( char *args
 );
int callback_make_certificate_asymmetric( char *args
 );
int callback_check_signature_symmetric( char *args
 );
int callback_check_signature_asymmetric( char *args
 );
int callback_check_ring_signature( char *args
 );
int callback_check_certificate_symmetric( char *args
 );
int callback_check_certificate_asymmetric( char *args
 );
int callback_make_hash( char *args
 );
int callback_make_checksum( char *args
 );
int callback_check_checksum( char *args
 );
int callback_check_hash( char *args
 );
int callback_convert_hash_to_point( char *args
 );
int callback_convert_point_to_monomial_key( char *args
 );
int callback_convert_monomial_key_to_point( char *args
 );
int callback_convert_binomial_key_to_start_point( char *args
 );
int callback_convert_start_point_to_point( char *args
 );
int callback_convert_point_to_start_point( char *args
 );
int callback_convert_monomial_key_to_monomial_commitment( char *args
 );
int callback_convert_monomial_commitment_to_monomial_key( char *args
 );
int callback_convert_asymmetric_certificate_to_binomial_key( char *args
 );
int callback_convert_hash_to_monomial_key( char *args
 );
int callback_convert_symmetric_certificate_to_monovalent_key( char *args
 );
int callback_convert_asymmetric_signature_to_binomial_key( char *args
 );
int callback_convert_symmetric_signature_to_binomial_key( char *args
 );
int callback_convert_binomial_key_to_asymmetric_signature( char *args
 );
int callback_convert_binomial_key_to_symmetric_signature( char *args
 );
int callback_split_symmetric( char *args
 );
int callback_encrypt_asymmetric( char *args
 );
int callback_encrypt_symmetric( char *args
 );
int callback_join_symmetric( char *args
 );
int callback_decipher_asymmetric( char *args
 );
int callback_decipher_symmetric( char *args
 );
int callback_check_complete_block( char *args
 );
int callback_make_block( char *args
 );
int callback_combine_block( char *args
 );
int callback_strip_header_from_block( char *args
 );
int callback_print_header( char *args
 );
int callback_print_lib_info( char *args
 );
int callback_version( char *args
 );
int callback_get_capacity( char *args
 );
int callback_make_steganography_block( char *args
 );
int callback_extract_steganography_block( char *args
 );
int callback_make_steganography_raw( char *args
 );
int callback_extract_steganography_raw( char *args
 );

parser_callback_function command[] = {
    {
     .command = XDC_DECODING_CONF,
     .func = &callback_decoding_conf,
     .opt = callback_option_decoding_conf,
     .n_opt = SIZEOFOPTION( callback_option_decoding_conf )
      },
    {.command = XEC_ENCODING_CONF,
     .func = &callback_encoding_conf,
     .opt = callback_option_encoding_conf,
     .n_opt = SIZEOFOPTION( callback_option_encoding_conf )
      },
    {.command = XAC_ARITHMETIC_CONF,
     .func = &callback_arithmetic_conf,
     .opt = callback_option_arithmetic_conf,
     .n_opt = SIZEOFOPTION( callback_option_arithmetic_conf )
      },
    {.command = XSC_SEQUENCE_CONF,
     .func = &callback_sequence_conf,
     .opt = callback_option_sequence_conf,
     .n_opt = SIZEOFOPTION( callback_option_sequence_conf )
      },
    {.command = XPC_PERMUTATION_CONF,
     .func = &callback_permutation_conf,
     .opt = callback_option_permutation_conf,
     .n_opt = SIZEOFOPTION( callback_option_permutation_conf )
      },
    {.command = XLC_LOGGING_CONF,
     .func = &callback_logging_conf,
     .opt = callback_option_logging_conf,
     .n_opt = SIZEOFOPTION( callback_option_logging_conf )
      },

    {.command = XDEP_DUMP_ENCODING_PARAM,
     .func = &callback_dump_encoding_param,
     .opt = callback_option_dump_encoding_param,
     .n_opt = SIZEOFOPTION( callback_option_dump_encoding_param )
      },
    {.command = XDE_DECODE_ENCODE,
     .func = &callback_decode_encode,
     .opt = callback_option_decode_encode,
     .n_opt = SIZEOFOPTION( callback_option_decode_encode )
      },
    {.command = XMXCR_MINE_XMATRIX_COMP_RND,
     .func = &callback_mine_xmatrix_comp_rnd,
     .opt = callback_option_mine_xmatrix_comp_rnd,
     .n_opt = SIZEOFOPTION( callback_option_mine_xmatrix_comp_rnd )
      },
    {.command = XMXCO_MINE_XMATRIX_COMP_OT,
     .func = &callback_mine_xmatrix_comp_ot,
     .opt = callback_option_mine_xmatrix_comp_ot,
     .n_opt = SIZEOFOPTION( callback_option_mine_xmatrix_comp_ot )
      },
    {.command = XPXCR_PERMUTE_XMATRIX_COMP_RANDOM,
     .func = &callback_permute_xmatrix_comp_random,
     .opt = callback_option_permute_xmatrix_comp_random,
     .n_opt = SIZEOFOPTION( callback_option_permute_xmatrix_comp_random )
      },
    {.command = XPXCD_PERMUTE_XMATRIX_COMP_DETERMINISTIC,
     .func = &callback_permute_xmatrix_comp_deterministic,
     .opt = callback_option_permute_xmatrix_comp_deterministic,
     .n_opt = SIZEOFOPTION( callback_option_permute_xmatrix_comp_deterministic )
      },
    {.command = XPXCS_PERMUTE_XMATRIX_COMP_CONFIDENTIAL,
     .func = &callback_permute_xmatrix_comp_confidential,
     .opt = callback_option_permute_xmatrix_comp_confidential,
     .n_opt = SIZEOFOPTION( callback_option_permute_xmatrix_comp_confidential )
      },
    {.command = XDX_DECOMPRESS_XMATRIX,
     .func = &callback_decompress_xmatrix,
     .opt = callback_option_decompress_xmatrix,
     .n_opt = SIZEOFOPTION( callback_option_decompress_xmatrix )
      },
    {.command = XCXC_CHECK_XMATRIX_COMP,
     .func = &callback_check_xmatrix_comp,
     .opt = callback_option_check_xmatrix_comp,
     .n_opt = SIZEOFOPTION( callback_option_check_xmatrix_comp )
      },
    {.command = XCX_CHECK_XMATRIX,
     .func = &callback_check_xmatrix,
     .opt = callback_option_check_xmatrix,
     .n_opt = SIZEOFOPTION( callback_option_check_xmatrix )
      },
    {.command = XMP_MAKE_POINT,
     .func = &callback_make_point,
     .opt = callback_option_make_point,
     .n_opt = SIZEOFOPTION( callback_option_make_point )
      },
    {.command = XMSPRN_MAKE_CONFIDENTIAL_PSEUDO_RANDOM_NUMBER,
     .func = &callback_make_confidential_pseudo_random_number,
     .opt = callback_option_make_confidential_pseudo_random_number,
     .n_opt = SIZEOFOPTION( callback_option_make_confidential_pseudo_random_number )
      },
    {.command = XMSP_MAKE_START_POINT,
     .func = &callback_make_start_point,
     .opt = callback_option_make_start_point,
     .n_opt = SIZEOFOPTION( callback_option_make_start_point )
      },
    {.command = XMMK_MAKE_MONOMIAL_KEY,
     .func = &callback_make_monomial_key,
     .opt = callback_option_make_monomial_key,
     .n_opt = SIZEOFOPTION( callback_option_make_monomial_key )
      },
    {.command = XMBK_MAKE_BINOMIAL_KEY,
     .func = &callback_make_binomial_key,
     .opt = callback_option_make_binomial_key,
     .n_opt = SIZEOFOPTION( callback_option_make_binomial_key )
      },
    {.command = XEMK_EXCHANGE_MONOMIAL_KEY,
     .func = &callback_exchange_monomial_key,
     .opt = callback_option_exchange_monomial_key,
     .n_opt = SIZEOFOPTION( callback_option_exchange_monomial_key )
      },
    {.command = XMMK_MAKE_MONOVALENT_KEY,
     .func = &callback_make_monovalent_key,
     .opt = callback_option_make_monovalent_key,
     .n_opt = SIZEOFOPTION( callback_option_make_monovalent_key )
      },
    {.command = XEPK_EXCHANGE_POLYVALENT_KEY,
     .func = &callback_exchange_polyvalent_key,
     .opt = callback_option_exchange_polyvalent_key,
     .n_opt = SIZEOFOPTION( callback_option_exchange_polyvalent_key )
      },
    {.command = XCMK_CHECK_MONOVALENT_KEY,
     .func = &callback_check_monovalent_key,
     .opt = callback_option_check_monovalent_key,
     .n_opt = SIZEOFOPTION( callback_option_check_monovalent_key )
      },
    {.command = XMCBK_MAKE_COMMITMENT_BINOMIAL_KEY,
     .func = &callback_make_commitment_binomial_key,
     .opt = callback_option_make_commitment_binomial_key,
     .n_opt = SIZEOFOPTION( callback_option_make_commitment_binomial_key )
      },
    {.command = XMCSS_MAKE_COMMITMENT_SYM_SIGNATURE,
     .func = &callback_make_commitment_sym_signature,
     .opt = callback_option_make_commitment_sym_signature,
     .n_opt = SIZEOFOPTION( callback_option_make_commitment_sym_signature )
      },
    {.command = XMCSC_MAKE_COMMITMENT_SYM_CERTIFICATE,
     .func = &callback_make_commitment_sym_certificate,
     .opt = callback_option_make_commitment_sym_certificate,
     .n_opt = SIZEOFOPTION( callback_option_make_commitment_sym_certificate )
      },
    {.command = XMR_MAKE_RESPONSE,
     .func = &callback_make_response,
     .opt = callback_option_make_response,
     .n_opt = SIZEOFOPTION( callback_option_make_response )
      },
    {.command = XMMP_MAKE_MONOMIAL_PROOF,
     .func = &callback_make_monomial_proof,
     .opt = callback_option_make_monomial_proof,
     .n_opt = SIZEOFOPTION( callback_option_make_monomial_proof )
      },
    {.command = XMMPSS_MAKE_MONOMIAL_PROOF_SYM_SIGNATURE,
     .func = &callback_make_monomial_proof_sym_signature,
     .opt = callback_option_make_monomial_proof_sym_signature,
     .n_opt = SIZEOFOPTION( callback_option_make_monomial_proof_sym_signature )
      },
    {.command = XMMPSC_MAKE_MONOMIAL_PROOF_SYM_CERTIFICATE,
     .func = &callback_make_monomial_proof_sym_certificate,
     .opt = callback_option_make_monomial_proof_sym_certificate,
     .n_opt = SIZEOFOPTION( callback_option_make_monomial_proof_sym_certificate )
      },
    {.command = XCMP_CHECK_MONOMIAL_PROOF,
     .func = &callback_check_monomial_proof,
     .opt = callback_option_check_monomial_proof,
     .n_opt = SIZEOFOPTION( callback_option_check_monomial_proof )
      },
    {.command = XCMPSS_CHECK_MONOMIAL_PROOF_SYM_SIGNATURE,
     .func = &callback_check_monomial_proof_sym_signature,
     .opt = callback_option_check_monomial_proof_sym_signature,
     .n_opt = SIZEOFOPTION( callback_option_check_monomial_proof_sym_signature )
      },
    {.command = XCMPSC_CHECK_MONOMIAL_PROOF_SYM_CERTIFICATE,
     .func = &callback_check_monomial_proof_sym_certificate,
     .opt = callback_option_check_monomial_proof_sym_certificate,
     .n_opt = SIZEOFOPTION( callback_option_check_monomial_proof_sym_certificate )
      },
    {.command = XMSS_MAKE_SIGNATURE_SYMMETRIC,
     .func = &callback_make_signature_symmetric,
     .opt = callback_option_make_signature_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_make_signature_symmetric )
      },
    {.command = XMSA_MAKE_SIGNATURE_ASYMMETRIC,
     .func = &callback_make_signature_asymmetric,
     .opt = callback_option_make_signature_asymmetric,
     .n_opt = SIZEOFOPTION( callback_option_make_signature_asymmetric )
      },
    {.command = XMRS_MAKE_RING_SIGNATURE,
     .func = &callback_make_ring_signature,
     .opt = callback_option_make_ring_signature,
     .n_opt = SIZEOFOPTION( callback_option_make_ring_signature )
      },
    {.command = XPRS_PERMUTE_RING_SIGNATURE,
     .func = &callback_permute_ring_signature,
     .opt = callback_option_permute_ring_signature,
     .n_opt = SIZEOFOPTION( callback_option_permute_ring_signature )
      },
    {.command = XMCS_MAKE_CERTIFICATE_SYMMETRIC,
     .func = &callback_make_certificate_symmetric,
     .opt = callback_option_make_certificate_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_make_certificate_symmetric )
      },
    {.command = XMCA_MAKE_CERTIFICATE_ASYMMETRIC,
     .func = &callback_make_certificate_asymmetric,
     .opt = callback_option_make_certificate_asymmetric,
     .n_opt = SIZEOFOPTION( callback_option_make_certificate_asymmetric )
      },
    {.command = XCSS_CHECK_SIGNATURE_SYMMETRIC,
     .func = &callback_check_signature_symmetric,
     .opt = callback_option_check_signature_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_check_signature_symmetric )
      },
    {.command = XCSA_CHECK_SIGNATURE_ASYMMETRIC,
     .func = &callback_check_signature_asymmetric,
     .opt = callback_option_check_signature_asymmetric,
     .n_opt = SIZEOFOPTION( callback_option_check_signature_asymmetric )
      },
    {.command = XCRS_CHECK_RING_SIGNATURE,
     .func = &callback_check_ring_signature,
     .opt = callback_option_check_ring_signature,
     .n_opt = SIZEOFOPTION( callback_option_check_ring_signature )
      },
    {.command = XCCS_CHECK_CERTIFICATE_SYMMETRIC,
     .func = &callback_check_certificate_symmetric,
     .opt = callback_option_check_certificate_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_check_certificate_symmetric )
      },
    {.command = XCCA_CHECK_CERTIFICATE_ASYMMETRIC,
     .func = &callback_check_certificate_asymmetric,
     .opt = callback_option_check_certificate_asymmetric,
     .n_opt = SIZEOFOPTION( callback_option_check_certificate_asymmetric )
      },
    {.command = XMH_MAKE_HASH,
     .func = &callback_make_hash,
     .opt = callback_option_make_hash,
     .n_opt = SIZEOFOPTION( callback_option_make_hash )
      },
    {.command = XMC_MAKE_CHECKSUM,
     .func = &callback_make_checksum,
     .opt = callback_option_make_checksum,
     .n_opt = SIZEOFOPTION( callback_option_make_checksum )
      },
    {.command = XCC_CHECK_CHECKSUM,
     .func = &callback_check_checksum,
     .opt = callback_option_check_checksum,
     .n_opt = SIZEOFOPTION( callback_option_check_checksum )
      },
    {.command = XCH_CHECK_HASH,
     .func = &callback_check_hash,
     .opt = callback_option_check_hash,
     .n_opt = SIZEOFOPTION( callback_option_check_hash )
      },
    {.command = XCHTP_CONVERT_HASH_TO_POINT,
     .func = &callback_convert_hash_to_point,
     .opt = callback_option_convert_hash_to_point,
     .n_opt = SIZEOFOPTION( callback_option_convert_hash_to_point )
      },
    {.command = XCPTMK_CONVERT_POINT_TO_MONOMIAL_KEY,
     .func = &callback_convert_point_to_monomial_key,
     .opt = callback_option_convert_point_to_monomial_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_point_to_monomial_key )
      },
    {.command = XCMKTP_CONVERT_MONOMIAL_KEY_TO_POINT,
     .func = &callback_convert_monomial_key_to_point,
     .opt = callback_option_convert_monomial_key_to_point,
     .n_opt = SIZEOFOPTION( callback_option_convert_monomial_key_to_point )
      },
    {.command = XCBKTSP_CONVERT_BINOMIAL_KEY_TO_START_POINT,
     .func = &callback_convert_binomial_key_to_start_point,
     .opt = callback_option_convert_binomial_key_to_start_point,
     .n_opt = SIZEOFOPTION( callback_option_convert_binomial_key_to_start_point )
      },
    {.command = XCSPTP_CONVERT_START_POINT_TO_POINT,
     .func = &callback_convert_start_point_to_point,
     .opt = callback_option_convert_start_point_to_point,
     .n_opt = SIZEOFOPTION( callback_option_convert_start_point_to_point )
      },
    {.command = XCPTSP_CONVERT_POINT_TO_START_POINT,
     .func = &callback_convert_point_to_start_point,
     .opt = callback_option_convert_point_to_start_point,
     .n_opt = SIZEOFOPTION( callback_option_convert_point_to_start_point )
      },
    {.command = XCMKTMC_CONVERT_MONOMIAL_KEY_TO_MONOMIAL_COMMITMENT,
     .func = &callback_convert_monomial_key_to_monomial_commitment,
     .opt = callback_option_convert_monomial_key_to_monomial_commitment,
     .n_opt = SIZEOFOPTION( callback_option_convert_monomial_key_to_monomial_commitment )
      },
    {.command = XCMCTMK_CONVERT_MONOMIAL_COMMITMENT_TO_MONOMIAL_KEY,
     .func = &callback_convert_monomial_commitment_to_monomial_key,
     .opt = callback_option_convert_monomial_commitment_to_monomial_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_monomial_commitment_to_monomial_key )
      },
    {.command = XCACTBK_CONVERT_ASYMMETRIC_CERTIFICATE_TO_BINOMIAL_KEY,
     .func = &callback_convert_asymmetric_certificate_to_binomial_key,
     .opt = callback_option_convert_asymmetric_certificate_to_binomial_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_asymmetric_certificate_to_binomial_key )
      },
    {.command = XCHTMK_CONVERT_HASH_TO_MONOMIAL_KEY,
     .func = &callback_convert_hash_to_monomial_key,
     .opt = callback_option_convert_hash_to_monomial_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_hash_to_monomial_key )
      },
    {.command = XCSCTMK_CONVERT_SYMMETRIC_CERTIFICATE_TO_MONOVALENT_KEY,
     .func = &callback_convert_symmetric_certificate_to_monovalent_key,
     .opt = callback_option_convert_symmetric_certificate_to_monovalent_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_symmetric_certificate_to_monovalent_key )
      },
    {.command = XCASTBK_CONVERT_ASYMMETRIC_SIGNATURE_TO_BINOMIAL_KEY,
     .func = &callback_convert_asymmetric_signature_to_binomial_key,
     .opt = callback_option_convert_asymmetric_signature_to_binomial_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_asymmetric_signature_to_binomial_key )
      },
    {.command = XCSSTBK_CONVERT_SYMMETRIC_SIGNATURE_TO_BINOMIAL_KEY,
     .func = &callback_convert_symmetric_signature_to_binomial_key,
     .opt = callback_option_convert_symmetric_signature_to_binomial_key,
     .n_opt = SIZEOFOPTION( callback_option_convert_symmetric_signature_to_binomial_key )
      },
    {.command = XCBKTAS_CONVERT_BINOMIAL_KEY_TO_ASYMMETRIC_SIGNATURE,
     .func = &callback_convert_binomial_key_to_asymmetric_signature,
     .opt = callback_option_convert_binomial_key_to_asymmetric_signature,
     .n_opt = SIZEOFOPTION( callback_option_convert_binomial_key_to_asymmetric_signature )
      },
    {.command = XCBKTSS_CONVERT_BINOMIAL_KEY_TO_SYMMETRIC_SIGNATURE,
     .func = &callback_convert_binomial_key_to_symmetric_signature,
     .opt = callback_option_convert_binomial_key_to_symmetric_signature,
     .n_opt = SIZEOFOPTION( callback_option_convert_binomial_key_to_symmetric_signature )
      },
    {.command = XSS_SPLIT_SYMMETRIC,
     .func = &callback_split_symmetric,
     .opt = callback_option_split_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_split_symmetric )
      },
    {.command = XEA_ENCRYPT_ASYMMETRIC,
     .func = &callback_encrypt_asymmetric,
     .opt = callback_option_encrypt_asymmetric,
     .n_opt = SIZEOFOPTION( callback_option_encrypt_asymmetric )
      },
    {.command = XES_ENCRYPT_SYMMETRIC,
     .func = &callback_encrypt_symmetric,
     .opt = callback_option_encrypt_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_encrypt_symmetric )
      },
    {.command = XJS_JOIN_SYMMETRIC,
     .func = &callback_join_symmetric,
     .opt = callback_option_join_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_join_symmetric )
      },
    {.command = XDA_DECIPHER_ASYMMETRIC,
     .func = &callback_decipher_asymmetric,
     .opt = callback_option_decipher_asymmetric,
     .n_opt = SIZEOFOPTION( callback_option_decipher_asymmetric )
      },
    {.command = XDS_DECIPHER_SYMMETRIC,
     .func = &callback_decipher_symmetric,
     .opt = callback_option_decipher_symmetric,
     .n_opt = SIZEOFOPTION( callback_option_decipher_symmetric )
      },
    {.command = XCCB_CHECK_COMPLETE_BLOCK,
     .func = &callback_check_complete_block,
     .opt = callback_option_check_complete_block,
     .n_opt = SIZEOFOPTION( callback_option_check_complete_block )
      },
    {.command = XMB_MAKE_BLOCK,
     .func = &callback_make_block,
     .opt = callback_option_make_block,
     .n_opt = SIZEOFOPTION( callback_option_make_block )
      },
    {.command = XCB_COMBINE_BLOCKS,
     .func = &callback_combine_block,
     .opt = callback_option_combine_block,
     .n_opt = SIZEOFOPTION( callback_option_combine_block )
      },
    {.command = XSHFB_STRIP_HEADER_FROM_BLOCK,
     .func = &callback_strip_header_from_block,
     .opt = callback_option_strip_header_from_block,
     .n_opt = SIZEOFOPTION( callback_option_strip_header_from_block )
      },
    {.command = XPH_PRINT_HEADER,
     .func = &callback_print_header,
     .opt = callback_option_print_header,
     .n_opt = SIZEOFOPTION( callback_option_print_header )
      },
    {.command = XPLI_PRINT_LIB_INFO,
     .func = &callback_print_lib_info,
     .opt = callback_option_print_lib_info,
     .n_opt = SIZEOFOPTION( callback_option_print_lib_info )
      },
    {.command = XV_VERSION,
     .func = &callback_version,
     .opt = callback_option_version,
     .n_opt = SIZEOFOPTION( callback_option_version )
      },

    {.command = XGC_GET_CAPACITY,
     .func = &callback_get_capacity,
     .opt = callback_option_get_capacity,
     .n_opt = SIZEOFOPTION( callback_option_get_capacity )
      },

    {.command = XMSB_MAKE_STEGANOGRAPHY_BLOCK,
     .func = &callback_make_steganography_block,
     .opt = callback_option_make_steganography_block,
     .n_opt = SIZEOFOPTION( callback_option_make_steganography_block )
      },

    {.command = XESB_EXTRACT_STEGANOGRAPHY_BLOCK,
     .func = &callback_extract_steganography_block,
     .opt = callback_option_extract_steganography_block,
     .n_opt = SIZEOFOPTION( callback_option_extract_steganography_block )
      },

    {.command = XMSR_MAKE_STEGANOGRAPHY_RAW,
     .func = &callback_make_steganography_raw,
     .opt = callback_option_make_steganography_raw,
     .n_opt = SIZEOFOPTION( callback_option_make_steganography_raw )
      },

    {.command = XESR_EXTRACT_STEGANOGRAPHY_RAW,
     .func = &callback_extract_steganography_raw,
     .opt = callback_option_extract_steganography_raw,
     .n_opt = SIZEOFOPTION( callback_option_extract_steganography_raw )
      },

};

#endif
